共计 634 个字符,预计需要花费 2 分钟才能阅读完成。
前言
目前博主手上有在写一个权限方面的项目(watchdog-framework),项目基于 Shiro 进行了权限验证,不过开启了 Cache 之后,不同的用户登录之后其权限都和第一个登录者缓存的权限一样,这样肯定是行不通的,无法达到权限的期望效果,于是就开启了一番探索之旅。
正文
首先第一个想到的就是缓存的原因,因为我使用了 Redis 缓存,所以直接在管理工具里面查看,发现不管登录多少个用户,用户 realm 信息缓存都只是会缓存一条,在 ShiroConfig 中每个 Bean 都检查了一遍,也没有找到原因,最终把问题源头锁定在自定义的 MyRealm 中,然后在重写的 doGetAuthenticationInfo
方法中打了断点,发现在执行后返回的 SimpleAuthenticationInfo
对象中的第三个参数的值,即为 realmName
,其值和 redis 里面缓存的唯一一条realm
的名称一样,看到这里貌似找到了问题的真正所在之处,于是就将返回语句中的 realmName
参数值变成如下的格式:
String name = Encrypt.md5(user.getId()+user.getUsername());
return new SimpleAuthenticationInfo(user,user.getPassword(),name);
后记
在遇到问题只有通过不断的分析调试,才可以找到最终的问题的所在之处,愿世上没有解决不了的 BUG!!!
共计5人点赞,其中1人来自小程序